﻿using Castle.DynamicProxy;
using EWC.Core.DependencyInjection;
using EWC.HIS.Domain.Data.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace EWC.HIS.Dapper.Data.Uow
{
    public class UnitOfWorkIInterceptor : IInterceptor, IScopedDependency
    {
        private IDbContext dBContext;
        public UnitOfWorkIInterceptor(IDbContext dBContext)
        {
            this.dBContext = dBContext;
        }
        public void Intercept(IInvocation invocation)
        {
            MethodInfo methodInfo = invocation.MethodInvocationTarget;
            if (methodInfo == null)
                methodInfo = invocation.Method;

            UnitOfWorkAttribute transaction = methodInfo.GetCustomAttributes<UnitOfWorkAttribute>(true).FirstOrDefault();
            //    //如果标记了 [UnitOfWork]，并且不在事务嵌套中。
            //    if (transaction != null && dBContext.Committed)
            //    {
            //        //开启事务
            //        dBContext.BeginTransaction();
            //        try
            //        {
            //            //事务包裹 查询语句 
            //            invocation.Proceed();
            //            //提交事务
            //            dBContext.Commit();
            //        }
            //        catch (Exception ex)
            //        {
            //            //回滚
            //            dBContext.RollBack();
            //            throw;
            //        }
            //    }
            //    else
            //    {
            //        //如果没有标记[UnitOfWork]，直接执行方法
            //        invocation.Proceed();
            //    }
        }
    }
}
